package com.udc.medLine.utils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.udc.medLine.carrinho.Carrinho;
import com.udc.medLine.entity.ItemVenda;
import com.udc.medLine.entity.Produto;

public final class CarrinhoUtils {

	public static Carrinho getCarrinho(HttpServletRequest request)throws Exception {

		Carrinho carrinho = CarrinhoUtils.cookieParaCarrinho(request);

		return carrinho;
	}

	/**
	 * Salva o carrinho no cookie do usuario
	 * 
	 * @param response
	 * @return
	 */
	public static void salvarCarrinho(HttpServletResponse response,
			Carrinho carrinho) {

		String produtos = CarrinhoUtils.carrinhoParaCookieString(carrinho);

		Cookie cookie = new Cookie("produtos", produtos);

		/*
		 * expira em uma semana
		 */
		cookie.setMaxAge(7 * 24 * 60 * 60);

		cookie.setPath("/med-line/");

		response.addCookie(cookie);
	}

	/**
	 * Remove o carrinho no cookie do usuario
	 * 
	 * @param response
	 * @return
	 */
	public static void removerCarrinho(HttpServletResponse response,Carrinho carrinho) {

		String produtos = CarrinhoUtils.carrinhoParaCookieString(carrinho);

		Cookie cookie = new Cookie("produtos", produtos);

		/*
		 * remove o carrinho do cookie
		 */
		cookie.setMaxAge(-1);

		cookie.setPath("/med-line/");

		response.addCookie(cookie);
		
	}

	/**
	 * @param carrinho
	 * @return
	 */
	protected static String carrinhoParaCookieString(Carrinho carrinho) {

		StringBuilder builder = new StringBuilder();

		for (ItemVenda itemVenda : carrinho.getItens()) {
			if(itemVenda.getItem().getTipoItem().getNome().equals(Produto.CONVENIENCIA)){
				
				builder.append(itemVenda.getItem().getConveniencia().getId());				
			}else{
			
				builder.append(itemVenda.getItem().getMedicamento().getId());				
			}
			builder.append(":");
			builder.append(itemVenda.getItem().getTipoItem().getNome());
			builder.append(":");
			builder.append(itemVenda.getQuantidade());
			builder.append(":");
			builder.append(itemVenda.getPreco());

			if (carrinho.getItens().indexOf(itemVenda) < (carrinho.getItens()
					.size() - 1)) {

				builder.append(",");
			}
		}

		return builder.toString();
	}

	private static Carrinho cookieParaCarrinho(HttpServletRequest request)
			throws Exception {

		Carrinho carrinho = new Carrinho();

		if (request.getCookies() != null) {

			for (Cookie cookie : request.getCookies()) {

				if (cookie.getName().equals("produtos")) {

					String[] produtos = cookie.getValue().split(",");

					for (String produto : produtos) {
						
						if (!produto.equals("")) {

							String[] valores = produto.split(":");

							String id = valores[0];
							String tipo = valores[1];
							String quantidade = valores[2];
							String preco = valores[3];

							carrinho.add(id, tipo, quantidade, preco);

						}
					}
				}
			}
		}

		return carrinho;
	}

}
